package br.com.infnet.cultbook.domain.pedido;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import br.com.infnet.cultbook.domain.produto.Livro;

@Entity
@Table(name = "item_pedido")
public class ItemPedido implements Serializable {
	
	private static final long serialVersionUID = -200384678034894650L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "id")
	private Long id;
	
	@Column(name = "quantidade", nullable = false)
	private Integer quantidade;
		
	@ManyToOne (optional = false)
	@JoinColumn (name = "livro_id", referencedColumnName = "id")
	private Livro livro;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Integer getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}

	public Livro getLivro() {
		return livro;
	}

	public void setLivro(Livro livro) {
		this.livro = livro;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(this == obj){
			return true;
		}
			
		if(!(obj instanceof Livro)){
			return false;
		}

		ItemPedido itemPedido = (ItemPedido)obj;
		
		if (id != null && itemPedido.id != null) {
            return id.equals(itemPedido.id);
        }
		if(livro == null){
			if(itemPedido.getLivro() != null){
				return false;
			}
		}else if(!livro.equals(itemPedido.getLivro())){
			return false;
		}
				
		return true;
	}
	
	@Override
	public int hashCode() {
		final int hashcode = 31;
        int result = 1;
		
        result = hashcode * result + ((id == null) ? 0 : id.hashCode());
        result = hashcode * result + ((livro == null) ? 0 : livro.hashCode()); 
        
		return result;		
	}
	
}
